package com.cetcs.kmga.dataManager.dao.mybatis;

import com.cetcs.kmga.common.Data;
import com.cetcs.kmga.dataManager.entity.dataManager.Resrc;
import com.cetcs.kmga.dataManager.entity.dataManager.vo.RankOfBehaviorVo;
import com.cetcs.kmga.dataManager.entity.dataManager.vo.RiskEventVo;
import com.cetcs.kmga.dataManager.entity.global.IdAndValVo;
import com.cetcs.kmga.dataManager.entity.global.NameAndValue;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 使用规律分析类
 *
 * @author xutao
 * @version V1.0 创建时间：2017-12-06 10:17
 *          Copyright 2017 by CETC
 */
@Repository
public interface UsePatternAnalysisMapper {


    /**
     * 统计某个资源各级别风险事件的数量
     *
     * @param id
     * @return
     */
  RiskEventVo statResourceRiskLevelNumByRescId(@Param("id") String id, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 统计资源的访问次数
     *
     * @param id        资源ID
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @return
     */
    Integer statResourceAccessNumByRescId(@Param("id") String id, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 根据资源ID-统计IP的采集量
     *
     * @param id        资源ID
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @return
     */
    List<IdAndValVo> statIpAccessNumByRescId(@Param("id") String id, @Param("startDate") String startDate, @Param("endDate") String endDate);




    //==================================yyangs start===================================

    /**
     * 先找出所有的资源访问总量
     *
     * @param dataMap   startDate 起始时间 endDate   结束时间
     * @return
     */
    Integer getAccessNumOfResourceAccess(Data dataMap);
    /**
     * 资源访问量排名
     *
     * @param dataMap   startDate 起始时间 endDate   结束时间 total_access_num 总数
     * @return
     */
    List<RankOfBehaviorVo> getRankOfResourceAccess(Data dataMap);
    /**
     * 每日访问量规律
     * @param dataMap   startDate 起始时间 endDate   结束时间
     * @return
     */
    List<NameAndValue> getDailyTrafficPatterns(Data dataMap);
    /**
     * 先找出所有的活跃IP总量
     *
     * @param dataMap   startDate 起始时间 endDate   结束时间
     * @return
     */
    Integer getAllActiveIPStatistics(Data dataMap);

    /**
     * 活跃IP统计（访问次数）
     * @param dataMap   startDate 起始时间 endDate   结束时间 total_access_num 总数
     * @return
     */
    List<RankOfBehaviorVo> getActiveIPStatistics(Data dataMap);
    /**
     * IP来源分布
     * @param dataMap   startDate 起始时间 endDate   结束时间
     * @return
     */
    List<NameAndValue> getDistributionOfIPSource(Data dataMap);
    /**
     * 操作类型分布
     * @param dataMap   startDate 起始时间 endDate   结束时间
     * @return
     */
    List<NameAndValue> getDistributionOfOptType(Data dataMap);

    //==================================yyangs end===================================
    /**
     * 根据资源ID-统计一段时间内每日的流量数量
     *
     * @param id        资源ID
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @return
     */
    List<IdAndValVo> statAvgHourAccessNumByRescId(@Param("id") String id, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 统计IP的来源分布
     *
     * @param id        资源ID
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @return
     */
    List<IdAndValVo> statIpSourceNumByRescId(@Param("id") String id, @Param("startDate") String startDate, @Param("endDate") String endDate);


    /**
     * 统计操作类型分布
     *
     * @param id        资源ID
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @return
     */
    List<IdAndValVo> statOperTypeSourceNumByRescId(@Param("id") String id, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 表访问量排名TOP10
     *
     * @param id        资源ID
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @return
     */
    List<IdAndValVo> statTblAccessNumByRescId(@Param("id") String id, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 统计集群或IP的访问次数
     *
     * @param id        集群ID
     * @param ip        集群IP
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @return
     */
    List<IdAndValVo> statResrcAccessNumByClientIdOrIp(@Param("id") String id, @Param("ip") String ip, @Param("startDate") String startDate, @Param("endDate") String endDate);


    /**
     * 统计集群或IP的库表访问次数
     *
     * @param id        集群ID
     * @param ip        集群IP
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @return
     */
    List<IdAndValVo> statTblAccessNumByClientIdOrIp(@Param("id") String id, @Param("ip") String ip, @Param("startDate") String startDate, @Param("endDate") String endDate);


    /**
     * 统计集群或IP的工具访问次数
     *
     * @param id        集群ID
     * @param ip        集群IP
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @return
     */
    List<IdAndValVo> statToolAccessNumByClientIdOrIp(@Param("id") String id, @Param("ip") String ip, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 统计集群或IP的操作类型访问次数
     *
     * @param id        集群ID
     * @param ip        集群IP
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @return
     */
    List<IdAndValVo> statOperTypeAccessNumByClientIdOrIp(@Param("id") String id, @Param("ip") String ip, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 统计每日使用规律
     *
     * @param id        集群ID
     * @param ip        集群IP
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @return
     */
    List<IdAndValVo> statSumHourAccessNumByClientIdOrIp(@Param("id") String id, @Param("ip") String ip, @Param("startDate") String startDate, @Param("endDate") String endDate);


}
